package cn.hy.机考.part02;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

/**
 * @author hy
 *
 *
 * 十七、给定 n 和 k，返回第 k 个排列
 * 给定参数n 从1到n会有n个整数 1，2，3，...n 这n个数字共有n!种排列 按大小顺序升序列出所有排列情况
 * 并 一 一 标 记 。
 * 当 n=3 时 ， 所有排列如下 “123”,“132”,“213”,“231”,“312”,“321”
 * 给定n和k 返回第n个排列
 *  第一行为 n
 *  第二行为 k
 * 输出排列第 k 位置的数字
 *
 * 3
 * 3
 * 213
 *
 */
public class Demo17 {

    public static List<Integer> list = new ArrayList<>();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int num = sc.nextInt();
            int index = sc.nextInt();
            int[] arr = new int[num];
            for (int i = 0 ; i < num ; i++) {
                arr[i] = i + 1;
            }

            exchange(arr, 0, num - 1);

//            list.sort((a, b) -> {
//                return  b > a ? -1 : 1;
//            });

            list.sort(Comparator.naturalOrder());
            System.out.println(list.get(index - 1));
        }
    }
    public static void swap(int[] arr, int a, int b) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
    public static void exchange(int[] arr, int begin, int end) {
        if (begin == end) {
            String s = "";
            for (int i : arr) {
                s += i;
            }
            list.add(Integer.parseInt(s));
        } else {
            for (int i = begin ; i <= end ; i++) {
                swap(arr, begin, i);
                exchange(arr, begin + 1, end);
                swap(arr, begin, i);
            }
        }
    }

}
